/*
ajax请求函数模块
返回值: promise对象(异步返回的数据是: response.data)<br/>
直接 axios.get(url) 或 axios.post(url, data) 返回的promise对象实际上是 response,
经过外层return new Promise(...)封装之后,，返回的promise对象实际上是 response.data
 */
import axios from 'axios'

/**
 *
 * @param url 请求路径
 * @param data 请求参数 QueryString
 * @param type 请求方式 GET/POST
 * @returns {Promise<unknown>}
 */
export default function ajax (url, data = {}, type = 'GET') {
  return new Promise(function (resolve, reject) {
    // 执行异步ajax请求
    let promise
    if (type === 'GET') {
      // 准备 url query 参数数据
      let dataStr = '' // 数据拼接字符串
      Object.keys(data).forEach(key => {
        dataStr += key + '=' + data[key] + '&'
      })
      if (dataStr !== '') {
        dataStr = dataStr.substring(0, dataStr.lastIndexOf('&'))
        url = url + '?' + dataStr
      }
      // 发送 get 请求
      promise = axios.get(url)
    } else {
      // 发送 post 请求
      promise = axios.post(url, data)
    }
    promise.then(function (response) {
      // 成功了调用resolve()
      resolve(response.data)
    })
      .catch(function (error) {
        //失败了调用reject()
        reject(error)
      })
    // 另一种写法
    /*promise.then(response => {
      // 成功了调用resolve()
      resolve(response.data)
    })
      .catch(error => {
        //失败了调用reject()
        reject(error)
      })*/
  })
}
